from datetime import date
from decimal import Decimal
from typing import Optional

from pydantic import BaseModel, Field

from ch04.emp_manager.models import SexValue


class EmpCreate(BaseModel):
    """创建员工的模型类"""
    id: int = Field(description='员工的ID，添加数据的时候不要传', default=None)
    name: str = Field(description='员工的名字', default=None)
    gender: SexValue = Field(description='员工的性别', default=None)
    sal: Decimal = Field(description='员工的基本薪资', default=None)
    bonus: int = Field(description='员工的奖金和津贴', default=None)
    is_leave: bool = Field(description='员工是否离职，True就是离职', default=False)
    entry_date: date = Field(description='员工的入职时间', default=None)
    dept_id: Optional[int] = Field(description='员工所属的部门ID', default=None)

    class Config:
        from_attributes = True  # 有这个配置，才能把ORM模型对象转换成 Pydantic模型对象


class DeptCreate(BaseModel):
    """创建部门的模型类"""
    id: int = Field(description='部门的ID，添加数据的时候不要传', default=None)
    name: str = Field(description='部门的名字', default=None)
    city: str = Field(description='部门所在的城市', default=None)

    class Config:
        from_attributes = True  # 有这个配置，才能把ORM模型对象转换成 Pydantic模型对象


class EmpResp(EmpCreate):
    """响应员工信息的模型类：保护该员工的所属部门"""
    dept: Optional[DeptCreate] = Field(description='所属部门', default=None)

    class Config:
        from_attributes = True  # 有这个配置，才能把ORM模型对象转换成 Pydantic模型对象